const basedata = require('../basedata/')
const getSpaceBase = require('./getSpaceBase')

/**
 * 通过必要的参数，创建uniCloud
 * 前端可以创建所有的uniCloud，云函数中只能创建相同类型的uniCloud，非相同类型的云服务空间需通过url访问
 * isApp：是否前端，覆盖的时候记得修改该值的默认值
 * 
 * space：目的云服务空间名称。不传表示当前项目绑定的云服务空间
 * name：数据库名称或者云函数名称
 * type：function云函数或者db数据库。即add、remove、alert、addAlert、get
 * detail：云对象所特有的方法名
 * 
 * 返回值
 * text：输出打印信息
 * cloud：uniCloud
 * url：跨云服务空间类型，只能通过url
 */
module.exports = (data, isApp = false) => {
	// 当前云服务空间名称。前端是当前项目的云服务空间；后端就是当前云服务空间
	const {current} = basedata
	var {space = current, name, detail, type = 'function'} = data || {}
	const result = {
		text: '', // 当前的文字说明
		cloud: undefined, // 可直接用于创建uinCloud的信息
		url: undefined  ,// 后端访问的api地址
		isCloudobj: false, // 是否云对象
	}
	if (basedata && name) {
		if (name.substr(-5) === '-test') {
			name = name.slice(0, -5)
		}
		/**
		 * 获取创建的uniCloud
		 * 后端实测阿里云，不能通过uniCloud.init创建。报错误。可能腾讯云可以
		 */
		const {api, cloudfunctions} = basedata[space]
		if (isApp) {
			result.cloud = uniCloud.init(getSpaceBase(basedata[space]))
		} else {
			// 后端实测阿里云，不能通过uniCloud.init创建。报错误。可能腾讯云可以。所以后端只有是当前云服务空间时，直接赋值uniCloud
			if (space === current) {
				result.cloud = uniCloud
			} else {
				if (api) {
					var apipath = ''
					if (type === 'function') {
						apipath = `/${cloudfunctions[name] || name}/${detail}`
						result.text = `云函数：${cloudfunctions[name] || name}`
					} else { // apipath统一为b-fetch云对象下的路径
						apipath = `/${cloudfunctions['b-fetch'] || 'fetch'}/${type}`
						result.text = `云函数：b-fetch，请求${type}`
					}
					result.isCloudobj = true
					result.url = api + apipath
				}
			}
		}
	} else {
		result.text = '云服务参数缺少'
	}
	return result
}